//
//  HMTabBar.swift
//  Weibo
//
//  Created by itteacher on 2017/7/22.
//  Copyright © 2017年 itteacher. All rights reserved.
//

import UIKit

//  定义代理协议, 代理协议要继承NSObjectProtocol，否则使用不了weak关键字
protocol HMTabBarDelegate: NSObjectProtocol {
    //  定义代理方法
    func clickComposeButtonOperation()
}

//  自定义UITabBar
class HMTabBar: UITabBar {
    //  点击撰写按钮执行的闭包
    var composeButtonClosure: (()->())?
    //  定义代理
    weak var hmDelegate: HMTabBarDelegate?
    
    //  MARK: --   懒加载控件
    private lazy var composeButton: UIButton = {
        let button = UIButton()
        //  添加点击事件
        button.addTarget(self, action: #selector(composeButtonAction), for: .touchUpInside)
        //  设置不同状态下背景图片
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button"), for: .normal)
        button.setBackgroundImage(UIImage(named: "tabbar_compose_button_highlighted"), for: .highlighted)
        //  设置不同状态下的图片
        button.setImage(UIImage(named: "tabbar_compose_icon_add"), for: .normal)
        button.setImage(UIImage(named: "tabbar_compose_icon_add_highlighted"), for: .highlighted)
        
        //  自适应
        button.sizeToFit()
        
        return button
        
    }()
    //  手写代码创建对象
    override init(frame: CGRect) {
        super.init(frame: frame)
        setupUI()
    }
    
    //  加载xib或者sb 会执行下面代码
    required init?(coder aDecoder: NSCoder) {
        //  不支持xib或者sb，如果使用方不知道你的代码不支持xib，会有错误提示，但是oc里面不会有提示
//        fatalError("init(coder:) has not been implemented")
        //  支持xib或者sb
        super.init(coder: aDecoder)
        setupUI()
    }
    
    //   添加子视图
    func setupUI() {
        //  设置背景图片，解决push阴影问题
        backgroundImage = UIImage(named: "tabbar_background")
        addSubview(composeButton)
        
    }
    
    
    //  MARK: --   撰写按钮点击事件 
    //  使用private表示私有，在swift私有函数在运行循环里面是找不到，因为swift是编译型语言，在编译的时候就需要确定调用那个方法
    //  @objc 表示使用oc的方式基于运行时动态派发的机制调用这个方法
    @objc private func composeButtonAction() {
        print("哈哈")
        //  ? 表示判断这个闭包是否有值，有值执行闭包，否则返回nil
        composeButtonClosure?()
        //  使用代理对象调用代理方法
        hmDelegate?.clickComposeButtonOperation()
    }
    
    //  调整子控件布局
    override func layoutSubviews() {
        super.layoutSubviews()
        
        //  设置中心点
        composeButton.centerX = width * 0.5
        composeButton.centerY = height * 0.5
    
        //  计算每项按钮的宽度
        let buttonWidth = width / 5
        
        //  记录系统按钮的索引
        var index = 0
        
        //  遍历子控件，获取系统按钮
        for subView in self.subviews {
            //  判断是否是指定系统按钮, UITabBarButton是系统私有的类，不能直接使用
            if subView.isKind(of: NSClassFromString("UITabBarButton")!)  {
                //  代码执行到此，表示系统UITabBarButton类型
                subView.width = buttonWidth
                //  设置x坐标
                subView.x = CGFloat(index) * buttonWidth
                //  记录系统按钮的索引
                index += 1
                if index == 2 {
                    //  多加上一个按钮的宽度，隔开中间加号按钮的宽度
                    index += 1
                }
            }
        }
        
    }

}
